// 全局用户信息初始化工具

/**
 * 初始化用户信息，确保localStorage中始终有有效的用户信息对象
 * 防止在组件中访问未定义的userInfo.roles属性
 */
export function initUserInfo() {
  try {
    const storedUserInfo = localStorage.getItem('userInfo');
    
    if (storedUserInfo) {
      try {
        const parsedUserInfo = JSON.parse(storedUserInfo);
        
        // 确保解析出的是有效的对象
        if (parsedUserInfo && typeof parsedUserInfo === 'object') {
          // 确保roles属性存在且为数组
          if (!Array.isArray(parsedUserInfo.roles)) {
            // 兼容role字段（单个角色）
            if (parsedUserInfo.role) {
              parsedUserInfo.roles = [parsedUserInfo.role];
            } else {
              parsedUserInfo.roles = [];
            }
          }
          
          // 重新保存修复后的用户信息
          localStorage.setItem('userInfo', JSON.stringify(parsedUserInfo));
        } else {
          // 如果解析出的不是有效对象，设置默认值
          setDefaultUserInfo();
        }
      } catch (e) {
        console.error('解析用户信息失败，设置默认值:', e);
        setDefaultUserInfo();
      }
    } else {
      // 如果localStorage中没有用户信息，设置默认值
      setDefaultUserInfo();
    }
  } catch (e) {
    console.error('初始化用户信息时发生错误:', e);
  }
}

/**
 * 设置默认用户信息到localStorage
 */
function setDefaultUserInfo() {
  const defaultUserInfo = {
    roles: [] // 默认为空角色数组
  };
  localStorage.setItem('userInfo', JSON.stringify(defaultUserInfo));
}

/**
 * 安全获取用户信息
 * @returns {Object} 包含roles属性的用户信息对象
 */
export function getSafeUserInfo() {
  try {
    const storedUserInfo = localStorage.getItem('userInfo');
    if (storedUserInfo) {
      const parsedUserInfo = JSON.parse(storedUserInfo);
      if (parsedUserInfo && typeof parsedUserInfo === 'object') {
        // 确保返回的对象始终有roles属性
        return {
          ...parsedUserInfo,
          roles: Array.isArray(parsedUserInfo.roles) ? parsedUserInfo.roles : []
        };
      }
    }
  } catch (e) {
    console.error('获取用户信息失败:', e);
  }
  
  // 返回安全的默认值
  return { roles: [] };
}

// 导出默认函数
export default initUserInfo;